home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 January / PCWorld_2007-01_cd.bin / v cisle / hotkey / AutoHotkey104504_Install.exe / AutoHotkey.chm / docs / scripts / intellisense.ahk < prev    next >
Text File  |  2006-11-15  |  5KB  |  182 lines

  1. ; IntelliSense -- by Rajat (requires XP/2k/NT)
  2. ; http://www.autohotkey.com
  3. ; This script watches while you edit an AutoHotkey script.  When it sees you
  4. ; type a command followed by a comma or space, it displays that command's
  5. ; parameter list to guide you.  In addition, you can press Ctrl+F1 (or
  6. ; another hotkey of your choice) to display that command's page in the help
  7. ; file. To dismiss the parameter list, press Escape or Enter.
  8.  
  9. ; Requires v1.0.25.0+
  10.  
  11. ; CONFIGURATION SECTION: Customize the script with the following variables.
  12.  
  13. ; The hotkey below is pressed to display the current command's page in the
  14. ; help file:
  15. I_HelpHotkey = ^F1
  16.  
  17. ; The string below must exist somewhere in the active window's title for
  18. ; IntelliSense to be in effect while you're typing.  Make it blank to have
  19. ; IntelliSense operate in all windows.  Make it Pad to have it operate in
  20. ; editors such as Metapad, Notepad, and Textpad.  Make it .ahk to have it
  21. ; operate only when a .ahk file is open in Notepad, Metapad, etc.
  22. I_Editor = pad
  23.  
  24. ; If you wish to have a different icon for this script to distinguish it from
  25. ; other scripts in the tray, provide the filename below (leave blank to have
  26. ; no icon). For example: E:\stuff\Pics\icons\GeoIcons\Information.ico
  27. I_Icon = 
  28.  
  29. ; END OF CONFIGURATION SECTION (do not make changes below this point unless
  30. ; you want to change the basic functionality of the script).
  31.  
  32. SetKeyDelay, 0
  33. #SingleInstance
  34.  
  35. if I_HelpHotkey <>
  36.     Hotkey, %I_HelpHotkey%, I_HelpHotkey
  37.  
  38. ; Change tray icon (if one was specified in the configuration section above):
  39. if I_Icon <>
  40.     IfExist, %I_Icon%
  41.         Menu, Tray, Icon, %I_Icon%
  42.  
  43. RegRead, ahk_dir, HKEY_LOCAL_MACHINE, SOFTWARE\AutoHotkey, InstallDir
  44. if ErrorLevel <> 0  ; Use a best guess location instead.
  45.     ahk_dir = %A_ProgramFiles%\AutoHotkey
  46.  
  47. IfNotExist %ahk_dir%
  48. {
  49.     MsgBox Could not find the AutoHotkey folder.
  50.     ExitApp
  51. }
  52.  
  53. ahk_help_file = %ahk_dir%\AutoHotkey.chm
  54.  
  55. ; Read command syntaxes:
  56. Loop, Read, %ahk_dir%\Extras\Editors\Syntax\Commands.txt
  57. {
  58.     I_FullCmd = %A_LoopReadLine%
  59.  
  60.     ; Directives have a first space instead of a first comma.
  61.     ; So use whichever comes first as the end of the command name:
  62.     StringGetPos, I_cPos, I_FullCmd, `,
  63.     StringGetPos, I_sPos, I_FullCmd, %A_Space%
  64.     if (I_cPos = -1 or (I_cPos > I_sPos and I_sPos <> -1))
  65.         I_EndPos := I_sPos
  66.     else
  67.         I_EndPos := I_cPos
  68.  
  69.     if I_EndPos <> -1
  70.         StringLeft, I_CurrCmd, I_FullCmd, %I_EndPos%
  71.     else  ; This is a directive/command with no parameters.
  72.         I_CurrCmd = %A_LoopReadLine%
  73.     
  74.     StringReplace, I_CurrCmd, I_CurrCmd, [,, All
  75.     StringReplace, I_CurrCmd, I_CurrCmd, %A_Space%,, All
  76.     StringReplace, I_FullCmd, I_FullCmd, ``n, `n, All
  77.     StringReplace, I_FullCmd, I_FullCmd, ``t, `t, All
  78.     
  79.     ; Make arrays of command names and full cmd syntaxes:
  80.     I_Cmd%A_Index% = %I_CurrCmd%
  81.     I_FullCmd%A_Index% = %I_FullCmd%
  82. }
  83.  
  84. ; Use the Input command to watch for commands that the user types:
  85. Loop
  86. {
  87.     ; Editor window check:
  88.     WinGetTitle, ActiveTitle, A
  89.     IfNotInString, ActiveTitle, %I_Editor%
  90.     {
  91.         ToolTip
  92.         Sleep, 500
  93.         Continue
  94.     }
  95.     
  96.     ; Get all keys till endkey:
  97.     Input, I_Word, V, {enter}{escape}{space}`,
  98.     I_EndKey = %ErrorLevel%
  99.     
  100.     ; Tooltip is hidden in these cases:
  101.     if I_EndKey in EndKey:Enter,EndKey:Escape
  102.     {
  103.         ToolTip
  104.         Continue
  105.     }
  106.  
  107.     ; Editor window check again!
  108.     WinGetActiveTitle, ActiveTitle
  109.     IfNotInString, ActiveTitle, %I_Editor%
  110.     {
  111.         ToolTip
  112.         Continue
  113.     }
  114.  
  115.     ; Compensate for any indentation that is present:
  116.     StringReplace, I_Word, I_Word, %A_Space%,, All
  117.     StringReplace, I_Word, I_Word, %A_Tab%,, All
  118.     if I_Word =
  119.         Continue
  120.     
  121.     ; Check for commented line:
  122.     StringLeft, I_Check, I_Word, 1
  123.     if (I_Check = ";" or I_Word = "If")  ; "If" seems a little too annoying to show tooltip for.
  124.         Continue
  125.  
  126.     ; Match word with command:
  127.     I_Index =
  128.     Loop
  129.     {
  130.         ; It helps performance to resolve dynamic variables only once.
  131.         ; In addition, the value put into I_ThisCmd is also used by the
  132.         ; I_HelpHotkey subroutine:
  133.         I_ThisCmd := I_Cmd%A_Index%
  134.         if I_ThisCmd =
  135.             break
  136.         if (I_Word = I_ThisCmd)
  137.         {
  138.             I_Index := A_Index
  139.             I_HelpOn = %I_ThisCmd%
  140.             break
  141.         }
  142.     }
  143.     
  144.     ; If no match then resume watching user input:
  145.     if I_Index =
  146.         Continue
  147.     
  148.     ; Show matched command to guide the user:
  149.     I_ThisFullCmd := I_FullCmd%I_Index%
  150.     ToolTip, %I_ThisFullCmd%, A_CaretX, A_CaretY + 20
  151. }
  152.  
  153.  
  154.  
  155. I_HelpHotkey:
  156. WinGetTitle, ActiveTitle, A
  157. IfNotInString, ActiveTitle, %I_Editor%, Return
  158.  
  159. ToolTip  ; Turn off syntax helper since there is no need for it now.
  160.  
  161. SetTitleMatchMode, 1  ; In case it's 3. This setting is in effect only for this thread.
  162. IfWinNotExist, AutoHotkey Help
  163. {
  164.     IfNotExist, %ahk_help_file%
  165.     {
  166.         MsgBox, Could not find the help file: %ahk_help_file%.
  167.         return
  168.     }
  169.     Run, %ahk_help_file%
  170.     WinWait, AutoHotkey Help
  171. }
  172.  
  173. if I_ThisCmd =  ; Instead, use what was most recently typed.
  174.     I_ThisCmd := I_Word
  175.  
  176. ; The above has set the "last found" window which we use below:
  177. WinActivate
  178. WinWaitActive
  179. StringReplace, I_ThisCmd, I_ThisCmd, #, {#}  ; Replace leading #, if any.
  180. Send, !n{home}+{end}%I_HelpOn%{enter}
  181. return
  182.